#ifndef __G_WINDOW
#define __G_WINDOW

#include "GWidget.h"

typedef struct _GWindow GWindow;
#define G_WINDOW(any) ((GWindow *)(any))

/**
 * @brief 创建一个程序所需的窗口
 */
extern GWidget *g_window_new(void);

typedef enum
{
        G_MODE_TYPE_FAST,
        G_MODE_TYPE_SLOW,
        G_MODE_TYPE_AUTO,
        G_MODE_TYPE_HANDLE,
        G_MODE_TYPE_NEED_LOGIN,
        G_MODE_TYPE_NONE,
} GModeType;

typedef enum
{
        /* 快速充电模式 102,0x66 */
        CHARGE_MODE_FAST = 'f',
        /* 慢速充电模式 115,0x73 */
        CHARGE_MODE_SLOW = 's',
        /* 智能充电模式 97,0x61 */
        CHARGE_MODE_AUTO = 'a',
        /* 手动充电模式 104,0x68 */
        CHARGE_MODE_HAND = 'h',
        /* 未充电 110,0x6e */
        CHARGE_MODE_NONE = 'n',
        /* 退出登陆 */
        CHARGE_MODE_LOGOUT = 'e',
} ChargeMode;

/**
 * @brief 设置充电模式
 */
extern void g_window_set_mode(const GWindow *self, GModeType mode);

/**
 * @brief 设置温度
 */
extern void g_window_set_temp(const GWindow *self, const float temp[]);

/**
 * @brief 设置电压值
 */
extern void g_window_set_voltage(const GWindow *self, float voltage);

/**
 * @brief 设置功率值 W
 */
extern void g_window_set_power(const GWindow *self, float power);

/**
 * @brief 设置充电进度 float 0 ~ 1.0
 */
extern void g_window_set_charge_percent(const GWindow *self, float percent);

/**
 * @brief 设置用户余额
 */
extern void g_window_set_balance(const GWindow *self, float balance);

/**
 * @brief 设置 Debug 信息
 */
extern void g_window_set_users_info(const GWindow       *self,
                                    const unsigned char *users_info);

/**
 * @brief 设置预约时间
 */
extern void g_window_set_order_time(const GWindow *self, int8_t order_tm[]);

/**
 * @brief 设置已充电时间
 */
extern void g_window_set_charging_time(const GWindow *self,
                                       uint8_t        charged_tm[]);

/**
 * @brief 设置当前充电进度
 */
extern void g_window_set_charge_process(const GWindow *self, float percent);

/**
 * @brief 设置当前充电模式
 */
extern void g_window_set_charge_mode(const GWindow *self, ChargeMode mode);

/**
 * @brief 设置当前电价
 * @param self GWindow 对象
 * @param price 当前电价
 */
extern void g_window_set_price(const GWindow *self, float price);

extern void g_window_set_debug_info(const GWindow       *self,
                                    const unsigned char *debug_info);

#endif
